package com.bwstudio.common.response;

import lombok.AllArgsConstructor;

/**
 * @Description: 实现了IResultCode接口的基础响应枚举类，提供了3个最基本的响应结果
 * @Author: Bu Wei
 * @Date: 2020年3月13日 上午10:30:30
 */
@AllArgsConstructor
public enum BasicErrorCodeEnum implements ErrorCodeI {

	/**
	 * 正确执行后的返回
	 */
	SUCCESS("00000", "成功"),
	/**
	 * 用户端错误
	 * 一级宏观错误码
	 */
	用户端错误("A0001", "用户端错误"),
	/**
	 * 用户注册错误
	 * 二级宏观错误码
	 */
	用户注册错误("A0100", "用户注册错误"),
	用户未同意隐私协议("A0101", "用户未同意隐私协议"),
	注册国家或地区受限("A0102", "注册国家或地区受限"),
	用户名校验失败("A0110", "用户名校验失败"),
	用户名已存在("A0111", "用户名已存在"),
	用户名包含敏感词("A0112", "用户名包含敏感词"),
	用户名包含特殊字符("A0113", "用户名包含特殊字符"),
	密码校验失败("A0120", "密码校验失败"),
	密码长度不够("A0121", "密码长度不够"),
	密码强度不够("A0122", "密码强度不够"),
	校验码输入错误("A0130", "校验码输入错误"),
	短信校验码输入错误("A0131", "短信校验码输入错误"),
	邮件校验码输入错误("A0132", "邮件校验码输入错误"),
	语音校验码输入错误("A0133", "语音校验码输入错误"),
	用户证件异常("A0140", "用户证件异常"),
	用户证件类型未选择("A0141", "用户证件类型未选择"),
	大陆身份证编号校验非法("A0142", "大陆身份证编号校验非法"),
	护照编号校验非法("A0143", "护照编号校验非法"),
	军官证编号校验非法("A0144", "军官证编号校验非法"),
	用户基本信息校验失败("A0150", "用户基本信息校验失败"),
	手机格式校验失败("A0151", "手机格式校验失败"),
	地址格式校验失败("A0152", "地址格式校验失败"),
	邮箱格式校验失败("A0153", "邮箱格式校验失败"),

	/**
	 * 用户登录异常
	 * 二级宏观错误码
	 */
	用户登录异常("A0200", "用户登录异常"),
	用户账户不存在("A0201", "用户账户不存在"),
	用户账户被冻结("A0202", "用户账户被冻结"),
	用户账户已作废("A0203", "用户账户已作废"),
	用户密码错误("A0210", "用户密码错误"),
	用户输入密码错误次数超限("A0211", "用户输入密码错误次数超限"),
	用户身份校验失败("A0220", "用户身份校验失败"),
	用户指纹识别失败("A0221", "用户指纹识别失败"),
	用户面容识别失败("A0222", "用户面容识别失败"),
	用户未获得第三方登录授权("A0223", "用户未获得第三方登录授权"),
	用户登录已过期("A0230", "用户登录已过期"),
	用户验证码错误("A0240", "用户验证码错误"),
	用户验证码尝试次数超限("A0241", "用户验证码尝试次数超限"),

	/**
	 * 访问权限异常
	 * 二级宏观错误码
	 */
	访问权限异常("A0300", "访问权限异常"),
	访问未授权("A0301", "访问未授权"),
	正在授权中("A0302", "正在授权中"),
	用户授权申请被拒绝("A0303", "用户授权申请被拒绝"),
	因访问对象隐私设置被拦截("A0310", "因访问对象隐私设置被拦截"),
	授权已过期("A0311", "授权已过期"),
	无权限使用API("A0312", "无权限使用 API"),
	用户访问被拦截("A0320", "用户访问被拦截"),
	黑名单用户("A0321", "黑名单用户"),
	账号被冻结("A0322", "账号被冻结"),
	非法IP地址("A0323", "非法 IP 地址"),
	网关访问受限("A0324", "网关访问受限"),
	地域黑名单("A0325", "地域黑名单"),
	服务已欠费("A0330", "服务已欠费"),
	用户签名异常("A0340", "用户签名异常"),
	RSA签名错误("A0341", "RSA 签名错误"),

	/**
	 * 用户请求参数错误
	 * 二级宏观错误码
	 */
	用户请求参数错误("A0400", "用户请求参数错误"),
	包含非法恶意跳转链接("A0401", "包含非法恶意跳转链接"),
	无效的用户输入("A0402", "无效的用户输入"),
	请求必填参数为空("A0410", "请求必填参数为空"),
	用户订单号为空("A0411", "用户订单号为空"),
	订购数量为空("A0412", "订购数量为空"),
	缺少时间戳参数("A0413", "缺少时间戳参数"),
	非法的时间戳参数("A0414", "非法的时间戳参数"),
	请求参数值超出允许的范围("A0420", "请求参数值超出允许的范围"),
	参数格式不匹配("A0421", "参数格式不匹配"),
	地址不在服务范围("A0422", "地址不在服务范围"),
	时间不在服务范围("A0423", "时间不在服务范围"),
	金额超出限制("A0424", "金额超出限制"),
	数量超出限制("A0425", "数量超出限制"),
	请求批量处理总个数超出限制("A0426", "请求批量处理总个数超出限制"),
	请求JSON解析失败("A0427", "请求 JSON 解析失败"),
	用户输入内容非法("A0430", "用户输入内容非法"),
	包含违禁敏感词("A0431", "包含违禁敏感词"),
	图片包含违禁信息("A0432", "图片包含违禁信息"),
	文件侵犯版权("A0433", "文件侵犯版权"),
	用户操作异常("A0440", "用户操作异常"),
	用户支付超时("A0441", "用户支付超时"),
	确认订单超时("A0442", "确认订单超时"),
	订单已关闭("A0443", "订单已关闭"),

	/**
	 * 用户请求服务异常
	 * 二级宏观错误码
	 */
	用户请求服务异常("A0500", "用户请求服务异常"),
	请求次数超出限制("A0501", "请求次数超出限制"),
	请求并发数超出限制("A0502", "请求并发数超出限制"),
	用户操作请等待("A0503", "用户操作请等待"),
	WebSocket连接异常("A0504", "WebSocket 连接异常"),
	WebSocket连接断开("A0505", "WebSocket 连接断开"),
	用户重复请求("A0506", "用户重复请求"),

	/**
	 * 用户资源异常
	 * 二级宏观错误码
	 */
	用户资源异常("A0600", "用户资源异常"),
	账户余额不足("A0601", "账户余额不足"),
	用户磁盘空间不足("A0602", "用户磁盘空间不足"),
	用户内存空间不足("A0603", "用户内存空间不足"),
	用户OSS容量不足("A0604", "用户 OSS 容量不足"),
	用户配额已用光("A0605", "用户配额已用光"),

	/**
	 * 用户上传文件异常
	 * 二级宏观错误码
	 */
	用户上传文件异常("A0700", "用户上传文件异常"),
	用户上传文件类型不匹配("A0701", "用户上传文件类型不匹配"),
	用户上传文件太大("A0702", "用户上传文件太大"),
	用户上传图片太大("A0703", "用户上传图片太大"),
	用户上传视频太大("A0704", "用户上传视频太大"),
	用户上传压缩文件太大("A0705", "用户上传压缩文件太大"),

	/**
	 * 用户当前版本异常
	 * 二级宏观错误码
	 */
	用户当前版本异常("A0800", "用户当前版本异常"),
	用户安装版本与系统不匹配("A0801", "用户安装版本与系统不匹配"),
	用户安装版本过低("A0802", "用户安装版本过低"),
	用户安装版本过高("A0803", "用户安装版本过高"),
	用户安装版本已过期("A0804", "用户安装版本已过期"),
	用户API请求版本不匹配("A0805", "用户 API 请求版本不匹配"),
	用户API请求版本过高("A0806", "用户 API 请求版本过高"),
	用户API请求版本过低("A0807", "用户 API 请求版本过低"),

	/**
	 * 用户隐私未授权
	 * 二级宏观错误码
	 */
	用户隐私未授权("A0900", "用户隐私未授权"),
	用户隐私未签署("A0901", "用户隐私未签署"),
	用户摄像头未授权("A0902", "用户摄像头未授权"),
	用户相机未授权("A0903", "用户相机未授权"),
	用户图片库未授权("A0904", "用户图片库未授权"),
	用户文件未授权("A0905", "用户文件未授权"),
	用户位置信息未授权("A0906", "用户位置信息未授权"),
	用户通讯录未授权("A0907", "用户通讯录未授权"),

	/**
	 * 用户设备异常
	 * 二级宏观错误码
	 */
	用户设备异常("A1000", "用户设备异常"),
	用户相机异常("A1001", "用户相机异常"),
	用户麦克风异常("A1002", "用户麦克风异常"),
	用户听筒异常("A1003", "用户听筒异常"),
	用户扬声器异常("A1004", "用户扬声器异常"),
	用户GPS定位异常("A1005", "用户 GPS 定位异常"),


	/**
	 * 系统执行出错
	 * 一级宏观错误码
	 */
	服务端错误("B0001", "系统资源异常"),

	/**
	 * 系统执行超时
	 * 二级宏观错误码
	 */
	系统执行超时("B0100", "系统执行超时"),
	系统订单处理超时("B0101", "系统订单处理超时"),

	/**
	 * 系统容灾功能被触发
	 * 二级宏观错误码
	 */
	系统容灾功能被触发("B0200", "系统容灾功能被触发"),
	系统限流("B0210", "系统限流"),
	系统功能降级("B0220", "系统功能降级"),

	/**
	 * 系统资源异常
	 * 二级宏观错误码
	 */
	系统资源异常("B0300", "系统资源异常"),
	系统资源耗尽("B0310", "系统资源耗尽"),
	系统磁盘空间耗尽("B0311", "系统磁盘空间耗尽"),
	系统内存耗尽("B0312", "系统内存耗尽"),
	文件句柄耗尽("B0313", "文件句柄耗尽"),
	系统连接池耗尽("B0314", "系统连接池耗尽"),
	系统线程池耗尽("B0315", "系统线程池耗尽"),
	系统资源访问异常("B0320", "系统资源访问异常"),
	系统读取磁盘文件失败("B0321", "系统读取磁盘文件失败"),


	/**
	 * 调用第三方服务出错
	 * 一级宏观错误码
	 */
	调用第三方服务出错("C0001", "调用第三方服务出错"),

	/**
	 * 中间件服务出错
	 * 二级宏观错误码
	 */
	中间件服务出错("C0100", "中间件服务出错"),

	RPC服务出错("C0110", "RPC 服务出错"),
	RPC服务未找到("C0111", "RPC 服务未找到"),
	RPC服务未注册("C0112", "RPC 服务未注册"),
	接口不存在("C0113", "接口不存在"),

	消息服务出错("C0120", "消息服务出错"),
	消息投递出错("C0121", "消息投递出错"),
	消息消费出错("C0122", "消息消费出错"),
	消息订阅出错("C0123", "消息订阅出错"),
	消息分组未查到("C0124", "消息分组未查到"),

	缓存服务出错("C0130", "缓存服务出错"),
	key长度超过限制("C0131", "key 长度超过限制"),
	value长度超过限制("C0132", "value 长度超过限制"),
	存储容量已满("C0133", "存储容量已满"),
	不支持的数据格式("C0134", "不支持的数据格式"),

	配置服务出错("C0140", "配置服务出错"),

	网络资源服务出错("C0150", "网络资源服务出错"),
	VPN服务出错("C0151", "VPN 服务出错"),
	CDN服务出错("C0152", "CDN 服务出错"),
	域名解析服务出错("C0153", "域名解析服务出错"),
	网关服务出错("C0154", "网关服务出错"),


	/**
	 * 第三方系统执行超时
	 * 二级宏观错误码
	 */
	第三方系统执行超时("C0200", "第三方系统执行超时"),
	RPC执行超时("C0210", "RPC 执行超时"),
	消息投递超时("C0220", "消息投递超时"),
	缓存服务超时("C0230", "缓存服务超时"),
	配置服务超时("C0240", "配置服务超时"),
	数据库服务超时("C0250", "数据库服务超时"),

	/**
	 * 数据库服务出错
	 * 二级宏观错误码
	 */
	数据库服务出错("C0300", "数据库服务出错"),
	表不存在("C0311", "表不存在"),
	列不存在("C0312", "列不存在"),
	多表关联中存在多个相同名称的列("C0321", "多表关联中存在多个相同名称的列"),
	数据库死锁("C0321", "数据库死锁"),
	主键冲突("C0341", "主键冲突"),

	/**
	 * 第三方容灾系统被触发
	 * 二级宏观错误码
	 */
	第三方容灾系统被触发("C0400", "第三方容灾系统被触发"),
	第三方系统限流("C0401", "第三方系统限流"),
	第三方功能降级("C0401", "第三方功能降级"),

	/**
	 * 通知服务出错
	 * 二级宏观错误码
	 */
	通知服务出错("C0500", "通知服务出错"),
	短信提醒服务失败("C0501", "短信提醒服务失败"),
	语音提醒服务失败("C0502", "语音提醒服务失败"),
	邮件提醒服务失败("C0503", "邮件提醒服务失败");

   private String code;
   private String message;

   @Override
   public String toString() {
       return this.name();
   }

	@Override
	public String getCode() {
		return this.code;
	}
	
	@Override
	public String getMessage() {
		return this.message;
	}
}
